package com.example.newinfinity.File

import android.app.Application
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Path
import android.util.Log
import android.widget.Toast
import com.example.newinfinity.UserRoom.User
import java.io.BufferedOutputStream
import java.io.File
import java.io.FileOutputStream

//管理账号弹窗中我的作品功能的实现
//用于为每个账号创建文件夹存储保存的图片
class FileManager private constructor() {
    private lateinit var context: Context

    //存储当前的登录用户姓名
    var currentUserName: String? = null

    //thumbnail与original字段
    private val thumbnailName = "thumbnail"
    private val originalName = "original"

    companion object {
        val instance: FileManager by lazy {
            FileManager()
        }

        //创建文件夹操作时少不了获取context,得到整个应用的context，防止死锁
        //MyApplication中onCreate时获取应用的context
        fun initContext(mContext: Application) {
            instance.context = mContext
        }
    }

    //获取系统files的地址
    private val filesPath: String by lazy {
        context.filesDir.path.toString()
    }


    //获取图片存储的thumbnail地址
    private fun getThumbnailPath(): String {
        return "${filesPath}/${currentUserName}/$thumbnailName"
    }

    //获取图片存储的original地址
    private fun getOriginalPath(): String {
        return "${filesPath}/${currentUserName}/$originalName"
    }

    //获取图片存储的根地址 例如：filesPath/currentUserName
    private fun getRootPath(): String {
        return "${filesPath}/${currentUserName}"
    }

    //与外部进行交互的方法
    //用户初次进行登录时 就创建与之对应的文件夹
    fun createFilePath(userName: String) {
        //保存当前登录用户的姓名
        currentUserName = userName

        //已经有了当前的根目录地址 就无需在创建
        val rootFile = File(getRootPath())
        if (rootFile.exists()) return

        //暂时没有创建该文件目录 就继续创建
        File(getOriginalPath()).mkdirs()
        File(getThumbnailPath()).mkdirs()
    }

    //接收外部传入的bitmap保存到对应的文件夹路径中
    fun saveBitmapInPath(bitmap: Bitmap, imageName: String, isOrigin: Boolean, userName: String?) {
        currentUserName = userName
        if (userName == null) return
        val path = if (isOrigin) {
            getOriginalPath()
        } else {
            getThumbnailPath()
        }
        //获取此bitmap应该存入的具体文件夹地址
        val filePath = "${path}/${imageName}.jpg"

        //将bitmap写入该地址
        BufferedOutputStream(FileOutputStream(filePath)).use { ops ->
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, ops)
        }
    }

    //提供给我的作品界面配置recyclerView中的图片信息
    //获取缩略图的路径（含图片的名称）
    fun getThumbnailImagesPath(): ArrayList<String> {
        val imageThumbnailPath = arrayListOf<String>()

        File(getThumbnailPath()).list()?.forEach { thumbnailPath ->
            imageThumbnailPath.add("${getThumbnailPath()}/$thumbnailPath")
        }
        return imageThumbnailPath
    }

    //获取完整图的路径
    fun getOnlyOriginalPath(name: String): String {
        return "${getOriginalPath()}/$name"
    }

    //删除对应路径中的图片
    fun deleteImage(string: String) {
        val path = File(string)
        Log.v("pxd","no")
        if (path.exists()) {
            path.delete()
            Log.v("pxd","delete")
        }
    }
}